package ongd.servicios.persistencia;

import ongd.negocio.gestion.Entidad;
import ongd.servicios.persistencia.exceptions.IllegalOrphanException;
import ongd.servicios.persistencia.exceptions.NonexistentEntityException;
import ongd.servicios.persistencia.exceptions.PreexistingEntityException;

/**
 * Interface que contiene los método que para realizar operaciones
 * sobre la base de datos.
 *
 * @author <a href="mailto:egi0002@alu.ubu.es">Elena García Iglesias</a>
 * @author <a href="mailto:cms0021@alu.ubu.es">Cristina Martínez Sanz</a>
 * @version 1.0 20120124
 *
 */
public interface IJPAControlador {

    /**
     * Método que crea un objeto de tipo entidad en la base de datos.
     * @param entidad Objeto que crearemos 
     * @param et Booleano que indica si hay que iniciar la transacción
     * @throws PreexistingEntityException
     * @throws Exception 
     */
    public void create(Entidad entidad, boolean et) throws PreexistingEntityException, Exception;

    /**
     * Método que edita un objeto de tipo entidad en la base de datos.
     * @param entidad Entidad que editaremos
     * @param et Booleano que indica si hay que iniciar la transacción
     * @throws IllegalOrphanException
     * @throws NonexistentEntityException
     * @throws Exception 
     */
    public void edit(Entidad entidad, boolean et) throws IllegalOrphanException, NonexistentEntityException, Exception;

    /**
     * Método que borra un objeto de tipo entidad de la base de datos.
     * @param clase Clase correpondiente al objeto a borrar
     * @param obj Clave primaria del objeto a borrar
     * @param et Booleano que indica si hay que iniciar la transaccion
     * @throws IllegalOrphanException
     * @throws NonexistentEntityException 
     */
    public void destroy(Class clase, Object obj, boolean et) throws IllegalOrphanException, NonexistentEntityException;

    /**
     * Método que busca una entidad en la base de datos.
     * @param clase Class correspondiente al objeto a buscar
     * @param obj Clave primaria del objeto a buscar
     * @return entidad
     */
    public Entidad findEntidad(Class clase, Object obj);
}
